MS-Windows followup for revision 109909, signal-handler cleanup.
authorEli Zaretskii <eliz@gnu.org>
Fri, 7 Sep 2012 08:20:07 +0000 (11:20 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 7 Sep 2012 08:20:07 +0000 (11:20 +0300)
 src/w32proc.c (sigaction): New function, emulates Posix 'sigaction'.
 src/w32.c (sigemptyset): Empty the set.
 (sigsetmask, sigmask, sigblock, sigunblock): Remove unused functions.

 nt/inc/ms-w32.h (struct sigaction): Declare sa_handler __cdecl.

nt/ChangeLog
nt/inc/ms-w32.h
src/ChangeLog
src/w32.c
src/w32proc.c

index 5e329d119bf185baeac821e98c1b8fc445c96391..7c5772a5f589c3d680a65dc5501355bd2a63838c 100644 (file)
@@ -1,3 +1,7 @@
+2012-09-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * inc/ms-w32.h (struct sigaction): Declare sa_handler __cdecl.
+
 2012-09-05  Juanma Barranquero  <lekktu@gmail.com>
 
        * config.nt: Sync with autogen/config.in.
index a18cf23374c69f1664462ef34d32ce56c139f79d..22255843f13c3d5b066b62b31132a1cbb29eabf1 100644 (file)
@@ -127,7 +127,7 @@ typedef int ssize_t;
 
 struct sigaction {
   int sa_flags;
-  void (*sa_handler)(int);
+  void (_CALLBACK_ *sa_handler)(int);
   sigset_t sa_mask;
 };
 #define SIG_BLOCK       1
index 464efb3a69cb4c446e553ec6ce6811ba7284462e..51456e16319a93df4545c2c738bbc0ab46f4e821 100644 (file)
@@ -1,5 +1,10 @@
 2012-09-07  Eli Zaretskii  <eliz@gnu.org>
 
+       * w32proc.c (sigaction): New function, emulates Posix 'sigaction'.
+
+       * w32.c (sigemptyset): Empty the set.
+       (sigsetmask, sigmask, sigblock, sigunblock): Remove unused functions.
+
        * alloc.c [ENABLE_CHECKING]: Include signal.h, since we need SIGABRT.
 
 2012-09-07  Dmitry Antipov  <dmantipov@yandex.ru>
index 4505afc18b3725f4f4019e6e2f5e6ebc81b6699d..04f7471577c46b66edc8b0fdc879ef199201b924 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -1530,34 +1530,10 @@ is_unc_volume (const char *filename)
 }
 
 /* Routines that are no-ops on NT but are defined to get Emacs to compile.  */
-
-int
-sigsetmask (int signal_mask)
-{
-  return 0;
-}
-
-int
-sigmask (int sig)
-{
-  return 0;
-}
-
-int
-sigblock (int sig)
-{
-  return 0;
-}
-
-int
-sigunblock (int sig)
-{
-  return 0;
-}
-
 int
 sigemptyset (sigset_t *set)
 {
+  *set = 0;
   return 0;
 }
 
index f83e81aedff29cf645b2a08db4a6e4b199ff1c73..b9239cbb99a6fb56b3f956c6d3e8722f71b17c4b 100644 (file)
@@ -103,6 +103,29 @@ sys_signal (int sig, signal_handler handler)
   return old;
 }
 
+/* Emulate sigaction. */
+int
+sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
+{
+  signal_handler old;
+
+  if (sig != SIGCHLD)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  old = sig_handlers[sig];
+  if (act)
+    sig_handlers[sig] = act->sa_handler;
+  if (oact)
+    {
+      oact->sa_handler = old;
+      oact->sa_flags = 0;
+      oact->sa_mask = empty_mask;
+    }
+  return 0;
+}
+
 /* Defined in <process.h> which conflicts with the local copy */
 #define _P_NOWAIT 1